<?php
////////////////////////////////////////////////////////////////////////////
//                                                                        //
// NOTICE OF COPYRIGHT                                                    //
//                                                                        //
// Dean`s Office for Moodle                                               //
// Электронный деканат                                                    //
// <http://deansoffice.ru/>                                               //
//                                                                        //
// Copyright (C) 2008-2999  Alex Djachenko (Алексей Дьяченко)             //
// alex-pub@my-site.ru                                                    //
// Copyright (C) 2008-2999  Evgenij Cigancov (Евгений Цыганцов)           //
//                                                                        //
// This program is free software: you can redistribute it and/or modify   //
// it under the terms of the GNU General Public License as published by   //
// the Free Software Foundation, either version 3 of the Licensen.        //
//                                                                        //
// This program is distributed in the hope that it will be useful,        //
// but WITHOUT ANY WARRANTY; without even the implied warranty of         //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          //
// GNU General Public License for more details.                           //
//                                                                        //
// You should have received a copy of the GNU General Public License      //
// along with this program.  If not, see <http://www.gnu.org/licenses/>.  //
//                                                                        //
////////////////////////////////////////////////////////////////////////////

// Подключаем библиотеки
require_once('lib.php');
//очищаем данные
//id записи в таблице
$id = optional_param('id', 0, PARAM_INT);
//кнопка удаления нажата
$del = optional_param('del', '', PARAM_TEXT);
//кнопка сохранения нажата
$save = optional_param('save', '', PARAM_TEXT);

$msg = '';
if ( data_submitted() AND confirm_sesskey() )
{//данные переданы в текущей сессии
	if ( $del )
	{// удаляем
		// $rez = $DOF->storage('examplest')->delete($id);
        // Удаление реализовано через модуль приказов
        // Создаем экземпляр приказа напрямую
        // $order = new dof_im_exampleim_order_delete($DOF);
        // Или через плагин
        $order = $DOF->im('exampleim')->order('delete');
        // Вводим данные (id, отдел, ответственный, время в приказе)
        $orderobj = new object();
        $orderobj->departmentid = 1;
        $orderobj->ownerid = 2;
        $orderobj->date = time();
        $orderobj->data->id = $id;
        // Сохраняем приказ в БД и привязываем экземпляр приказа к id
        $order->save($orderobj);
        // Подписываем от имени персоны 2
        $order->sign(3);
        // Исполняем приказ
        $rez = $order->execute();
		if ( $rez )
		{//сообщаем об успешном удалении
			$msg .= '<br />'.$DOF->get_string('delete_true', 'exampleim');
		}else
		{//сообщаем о неудаче при удалении
			$msg .= '<br />'.$DOF->get_string('error_delete', 'exampleim');
		}
	}
	//создадим объект для записи
	$new = new object;
	$new->code = required_param('code', PARAM_TEXT);
	$new->name = required_param('name', PARAM_TEXT);
	if ( $save )
	{//сохраняем
		if ( ! $id  AND $DOF->storage('examplest')->is_exists_filter('code', $new->code) )
		{//новая запись, но такой код уже используется - ошибка';
			error('object with code '.$new->code.' already exists!');
		}
		else if ( ! $id  AND ! $DOF->storage('examplest')->is_exists_filter('code', $new->code) )
		{//новая запись с уникальным кодом - сохраняем';
			$id = $DOF->storage('examplest')->insert($new);
			if ( $id )
			{//сообщение о добавлении записи
				$msg .= '<br />'.$DOF->get_string('insert_true', 'exampleim');
			}else
			{//сообщение о неудаче добавления записи
				$msg .= '<br />'.$DOF->get_string('error_save', 'exampleim');
			}
		}
		else if ( $id  AND ! $DOF->storage('examplest')->is_exists_filter('code', $new->code) )
		{//старая запись с новым уникальным кодом - сохраняем';
			$rez = $DOF->storage('examplest')->update($new, $id);
			if ( $rez )
			{//сообщение о обновлении записи
				$msg .= '<br />'.$DOF->get_string('update_true', 'exampleim');
			}else
			{//сообщение о неудаче обновления записи
				$msg .= '<br />'.$DOF->get_string('error_save', 'exampleim');
			}
		}
		else if ( ! $DOF->storage('examplest')->get_filter('id', $id, 'code', $new->code) )
		{//в старой записи изменили код, но такой код уже используется';
			error('object with code '.$new->code.' already exists!');
		}else
		{//в старой записи изменились не уникальные поля - обновляем';
			$rez = $DOF->storage('examplest')->update($new, $id);
			if ( $rez )
			{//сообщение о обновлении записи
				$msg .= '<br />'.$DOF->get_string('update_true', 'exampleim');
			}else
			{//сообщение о неудаче обновления записи
				$msg .= '<br />'.$DOF->get_string('error_save', 'exampleim');
			}
		}
		//обновляем статус
		$newstatus = optional_param('status', '', PARAM_TEXT);
		if ( ! $DOF->storage('examplest')->
					is_exists_filter('id', $id, 'status', $newstatus) )
		{//статус события надо изменить';
			$DOF->workflow('examplewf')->change($id, $newstatus);
		}
	}
}

// Получаем запись и
//готовим данные для отображения формы
if ($id AND $obj = $DOF->storage('examplest')->get($id))
{//объект есть - формируем поле выбора статуса
	$statuslist = $DOF->workflow('examplewf')->get_list();//получаем список всех статусов
    $statuslist[NULL]='';
	$available = $DOF->workflow('examplewf')->get_available($obj->id);//получаем статусы, в которые можно переходить из текущего
	if ( is_array($available) )
	{//формируем строку для отображения меню
        // var_dump($statuslist);var_dump($obj->status);
		$status_menu = '<select name="status">';
		$status_menu .= '<option selected value="'.$obj->status.'">'.$statuslist[$obj->status].'</option>';
		foreach ($available as $key=>$status)
		{
			$status_menu .= '<option value="'.$key.'">'.$status.'</option>';
		}
		$status_menu .= '</select>';
	}
}else
{//нет такого объекта - создаем пустой объект
	$obj = new object;
	$obj->id = '';
	$obj->code = '';
	$obj->name = '';
}

// Удаляем лишние слеши, добавленные при выборке из БД
//записываем идентификатор текущей сессии
$sesskey = !empty($USER->id) ? $USER->sesskey : '';
//создаем и форматируем таблицу
$table = new object();
$table->tablealign = "center";
$table->align = array ("center","center","center", "center", "center");
$table->wrap = array ("nowrap","","","");
$table->cellpadding = 5;
$table->cellspacing = 0;
$table->width = '70%';
$table->head = array('id', 'code', 'name', 'status');
//заполняем таблицу данными
if(!$obj->id)
{//преобразовали к строковому типу для вывода
	$obj->id = '';
}
$data = array($obj->id,//данные таблицы 
			"<input type=\"text\" name=\"code\" value=\"{$obj->code}\" size=\"30\" />",
			"<input type=\"text\" name=\"name\" value=\"{$obj->name}\" size=\"30\" />");
if ( isset($status_menu) )
{//если есть меню выбора статуса - добавим его
	$data[] = $status_menu;
}
//передем данные в таблицу
$table->data = array($data);
//печатаем заголовок страницы
$DOF->modlib('nvg')->print_header(NVG_MODE_PAGE);
//выводим форму
print 	"<form name=\"edit_obj\" method=\"post\" action=\"".$_SERVER['PHP_SELF']."\">";
print_simple_box_start();
//печать таблицы и формы редактирования
$DOF->modlib('widgets')->print_table($table);
//запомним нужные данные в скрытых полях
print "<input type=\"hidden\" name=\"sesskey\" value=\"".$sesskey."\" size=\"30\" />";
if ($obj->id != 0)
{//сохраним id записи
	print "<input type=\"hidden\" name=\"id\" value=\"{$obj->id}\" size=\"30\" />";
}else
{//чтобы значение было именно 0, а не ''
	print "<input type=\"hidden\" name=\"id\" value=\"0\" size=\"30\" />";
}
//выводим кнопки удаления/сохранения
print " <p align=\"center\">
		<input type=\"submit\" name=\"save\" value=\"".$DOF->get_string('to_save', 'exampleim')."\" />
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
		<input type=\"submit\" name=\"del\" value=\"".$DOF->get_string('to_del', 'exampleim')."\" /></p>";
print_simple_box_end();
print '</form>';
//выводим сообщение о результатах работы
print '<div>'.$msg.'</div>';
//покажем ссылку "назад"
print '<p align="center"><a href="'.$DOF->modlib('nvg')->get_url().'">'
		  .$DOF->get_string('backwards', 'nvg', null, 'modlib').'</a></p>';
//вывели подвал страницы
$DOF->modlib('nvg')->print_footer(NVG_MODE_PAGE);
?>